<?php
/**
 * PortScanner zur pruefung offener und geschlossener Ports
 *
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2013 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 * @TODO
 * */


Class Yapary_WWW_PortScanner
{
    /** Liste aller Host im format array[] = $host */
    private $arrHost = array();

    /** Liste aller Ports im format array[] = $port */
    private $arrPort = array();


    function __construct () {

    }

    /**
	* Fuegt einen zu scannenden Host hinzu
     * @param string $host		: Host {www.website.de}
	* @return void
	*/
    public function addHost ($host) {
        $this->arrHost[] = $host;
    }

    /**
	* Fuegt einen zu scannenden Port hinzu
     * @param string $port		: Port, ueber welchen die Verbindung erfolgen soll {80}
	* @return void
	*/
    public function addPort ($port) {
        $this->arrPort[] = $port;
    }

    /**
	 * Fuehrt einen X*Y-Scan durch (alle Hosts mit allen Ports)
	 * Ergebnis wird in Array gespeichert. Unter arr[0] alle offenen und unter arr[1] alle geschlossenen Ports
	 * @param string $timeout    : Timeout fur Unterbrechung
	 * @return array() 	:	array[0] = array[Host] = array(Port1, Port2,...) // offene Ports
	 * 						array[1] = array[Host] = array(Port3, Port4,...) // geschlossene Ports
	 * */
    public function run ($timeout = 10) {
        $arrResult = array(array(), array());

        if (count($this->arrHost) && count($this->arrPort)) {
            foreach ($this->arrHost as $i => $host) {
                foreach ($this->arrPort as $j => $port) {
                    if (@fsockopen($host, $port, $errno, $errstr, $timeout)) { // Port offen
                        $arrResult[0][$host][] = $port;
                    } else { // Port geschlossen oder Connection nicht moeglich
                        $arrResult[1][$host][] = $port;
                    }

                }

            }
        }

        return $arrResult;
    }

}

?>